home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Information / THINK C Digest / 1991 / 91-01 next >
Text File  |  1995-12-31  |  48KB  |  1,584 lines

  1. 
  2. Path: ucivax!gateway
  3. From: mcmac@hubcap.clemson.edu (robert s mcalister)
  4. Subject: how do you trap an event in an INIT?
  5. Message-ID: <9101042303.AA10337@hubcap.clemson.edu>
  6. X-Mailer: Elm [version 2.1 PL1]
  7. Newsgroups: fa.think-c
  8. Lines: 8
  9. Date: 4 Jan 91 23:17:24 GMT
  10.  
  11.  
  12. I am looking for some sample code on how to trap events
  13. in an INIT.  I am trying to trap a disk insertion.
  14. Thanks in advance.
  15.  
  16. Scott McAlister         mcmac@hubcap.clemson.edu
  17. Clemson University
  18.  
  19. 
  20. 
  21. Path: ucivax!gateway
  22. From: nick@lfcs.edinburgh.ac.UK (Nick Rothwell)
  23. Subject: Re: Resorceror
  24. Message-ID: <13483.9101071603@subnode.lfcs.ed.ac.uk>
  25. Newsgroups: fa.think-c
  26. Lines: 10
  27. Date: 7 Jan 91 17:16:50 GMT
  28.  
  29. >No more "Shall I create
  30. >a resource fork?" nonsense.
  31.  
  32. Why is this nonsense? What does Resorcerer do instead? Create one
  33. regardless? I'd rather have the warning.
  34.  
  35. Resorcerer sounds nice though, but it's expensive and probably totally
  36. unobtainable outside the US. ResEdit 1.2 is neither.
  37.  
  38. Nick.
  39. 
  40. 
  41. Path: ucivax!gateway
  42. From: mak@computer-science.nottingham.ac.UK (Martijn Koster)
  43. Subject: Crash in __msg after cancelling PickFileName...Why? Help!
  44. Message-ID: <9101090600.aa04911@ICS.UCI.EDU>
  45. Newsgroups: fa.think-c
  46. Lines: 61
  47. Date: 9 Jan 91 14:03:46 GMT
  48.  
  49. OK, I'm going mad...
  50.  
  51. I get crashes when sending a Dispose from my application to a document,
  52. before the message actually gets there. The debugger was no help, so
  53. I had a look with TMON, and found the problem is an address error in
  54. __msg (in oops.c):
  55.  
  56.                 lea     2(a5,d0.w),a1   ;  A1 ==> class record + 2
  57. crash-->        move.w  (a1)+,d0        ;  D0.W = #methods - 1
  58.          @2     move.w  (a1)+,d1        ;  D1.W = method ID
  59.  
  60. Why do I get this and what do I do about it? I'll explain what the app
  61. does, and then describe the crash scenario.
  62.  
  63. My application is very simple indeed: it asks for a file, then asks
  64. the user to pick a file name and copies the contents of the file into
  65. the new one while performing some conversion on the data. So it doesn't
  66. really have documents as such, but I did use the CDocument to divide up
  67. this program.
  68.  
  69. Here's the architecture:
  70.  
  71. File:     Convert.c  ConvertApp.c         ConvertDoc.c
  72.           ---------  ------------         ------------
  73. Methods:  main       IConvertApp          IConvertDoc
  74.                      SetUpFileParameters  NewFile
  75.                      CreateDocument       OpenFile
  76.                      OpenDocument         Dispose
  77. This is what they do:
  78. --------------------------------------------------------------------------
  79. NewDocument()                           OpenDocument(SFReply *macReply)
  80. {                                       {
  81.    aDoc = new(ConvertDoc);                 aDoc = new(ConvertDoc);
  82.    aDoc->IKvKConvertDoc(this);             aDoc->IKvKConvertDoc(this);
  83.    aDoc->NewFile();                        aDoc->OpenFile(macReply);
  84.    aDoc->Dispose();                        aDoc->Dispose();
  85. }                                       }
  86. --------------------------------------------------------------------------
  87. OpenFile(macReply)              NewFile()
  88. {                               {
  89.    Open file                       gApplication->ChooseFile(&macSFReply);
  90.    PickFileName(macReply)          if (macSFReply.good)
  91.    if (! macReply->good)           OpenFile(&macSFReply);
  92.        return;                  }
  93.    Open file
  94.    do the conversion
  95. }
  96. --------------------------------------------------------------------------
  97.  
  98. If I do Open, select a file and give a filename ->  OK
  99. If at startup (NewFile) I select a file then cancel the PickFileName -> OK
  100. If I do Open, select a filename and then cancel the PickFileName -> I get a
  101. crash in __msg when it tries to do the Dispose.
  102.  
  103. First I got mysterious crashes straight after the PickFileName, now
  104. I only get them when trying to dispose.
  105.  
  106. What is going on here?? No doubt it is my fault, but when it's not my
  107. programming that crashes it's difficult to find out what you did wrong :-/
  108.  
  109. -- Martijn Koster
  110. 
  111. 
  112. Path: ucivax!gateway
  113. From: nick@lfcs.edinburgh.ac.UK (Nick Rothwell)
  114. Subject: Re: Crash in __msg after cancelling PickFileName...Why? Help!
  115. Message-ID: <15835.9101091513@subnode.lfcs.ed.ac.uk>
  116. Newsgroups: fa.think-c
  117. Lines: 18
  118. Date: 9 Jan 91 16:21:45 GMT
  119.  
  120. >I get crashes when sending a Dispose from my application to a document,
  121. >before the message actually gets there. The debugger was no help, so
  122. >I had a look with TMON, and found the problem is an address error in
  123. >__msg (in oops.c):
  124.  
  125. From the fragments of code you provide, it isn't easy to see what's
  126. happening and how things are scoped.
  127.  
  128. My guess: you're doing a method call to an object that has been Disposed.
  129. I've hit that one a number of times, and it often results in an address
  130. error during the dispatch.
  131.  
  132. Use the THINK debugger, and just before the method dispatch, check the
  133. sanity of the object whose method you're about to call.
  134.  
  135. >-- Martijn Koster
  136.  
  137. Nick.
  138. 
  139. 
  140. Path: ucivax!gateway
  141. From: cht@athena.mit.edu ("aka the Devastater.  destruction, pillage....")
  142. Subject: Getting back to Finder and Random Drawing
  143. Message-ID: <9101092146.AA04433@e40-008-9.MIT.EDU>
  144. Newsgroups: fa.think-c
  145. Lines: 19
  146. Date: 9 Jan 91 21:49:19 GMT
  147.  
  148. Hi!   If you know the answer to these two questions, could you
  149. please reply?  Thanks!
  150.  
  151. 1)  When a program crashes and I go into MacsBug, is there an
  152. address I can jump to in order to get back to the Finder?  (when
  153. running multiFinder)  Typing "es" doesn't always work.
  154.  
  155. 2)  How do I draw to a window and have the effect take place
  156. immediately instead of using InvalRect and collecting update
  157. events?  I am using Think C 4.0.  I would like to have a
  158. procedure draw something without having to call the Draw()
  159. procedure in the Pane object.
  160.  
  161. Thanks again!
  162. Chester Liu
  163.  
  164. cht@athena.mit.edu
  165.  
  166.  
  167. 
  168. 
  169. Path: ucivax!gateway
  170. From: Tom_Johnson@chip.cs.ucla.edu (Tom Johnson)
  171. Subject: Think C and Comm Toolbox
  172. Message-ID: <9101101634.aa18522@ICS.UCI.EDU>
  173. Newsgroups: fa.think-c
  174. Lines: 12
  175. Date: 11 Jan 91 00:35:27 GMT
  176.  
  177.                Think C and Comm Toolbox
  178. Can someone point me in the direction of the header files for the comm toolbox?
  179.  I've already converted the ".o" file, but I was hoping that someone else had
  180. already converted all the .h files.
  181.  
  182.  
  183. Thanks--
  184.  
  185. Tom
  186. tj@cs.ucla.edu
  187.  
  188.  
  189. 
  190. 
  191. Path: ucivax!gateway
  192. From: chase@ee.princeton.edu (Chris Chase)
  193. Subject: Calling methods from a code resource?
  194. Message-ID: <9101151908.AA18303@olympus>
  195. Newsgroups: fa.think-c
  196. Lines: 32
  197. Date: 15 Jan 91 19:14:52 GMT
  198.  
  199. I have a question regarding TCL. Can methods defined in an application
  200. be called from a code resource? For example, suppose I have a class
  201. foo with method func defined in an application program. Can I create a
  202. code resource that takes an instance of object foo as an argument and
  203. call the method func? Of course the code resource would require the
  204. prototype declaration for the class foo.
  205.  
  206. The TCL manual does not make clear how method calls are implemented
  207. (there are only a few comments about a runtime dispatcher and direct
  208. calls without making clear exactly what happens). So I don't know if
  209. the
  210. linker will allow me to do this in a code resource. It would seem that
  211. the concept of an object should allow method calls in programs where
  212. the the method is not defined by calling the method at runtime.
  213.  
  214. Could someone give me some insight into how the Think C compiler
  215. implements method calls and if the above would work?
  216.  
  217. The reason that I would want to implement something like the above is
  218. that it allows code resources to be added that extend an applications
  219. abilities by accessing data and functions within the application
  220. without having to have the application source and recompile it. (one
  221. would only need the class declarations with documentation.)
  222.  
  223. As an aside, am I right to believe that there should be no problem in
  224. accessing the instance variables for the object in the code resource?
  225.  
  226.  
  227. Thank you in advance,
  228. Chris Chase
  229. chase@ee.princeton.edu
  230.  
  231. 
  232. 
  233. Path: ucivax!gateway
  234. From: kg1a+@andrew.cmu.edu (Kevin Michael Goldsmith)
  235. Subject: Midi Questions
  236. Message-ID: <8bYpb=O00UgKE2mWNB@andrew.cmu.edu>
  237. Newsgroups: fa.think-c
  238. Lines: 11
  239. Date: 15 Jan 91 19:41:59 GMT
  240.  
  241. Does anyone have any info on the MIDI manager, or know where I can get
  242. some?  Also, I have heard that it isn't that great.  Does anyone know
  243. about the protocols that the opcode boxes use?  Are they in printer
  244. events or what?
  245.  
  246. Thanks,
  247.   Kevin Goldsmith
  248. kg1a+@andrew.cmu.edu
  249. kmg@isl1.ri.cmu.edu
  250.  
  251. Disclaimer: Disclaimer, I don't need no stinkin disclaimer.
  252. 
  253. 
  254. Path: ucivax!gateway
  255. From: kg1a+@andrew.cmu.edu (Kevin Michael Goldsmith)
  256. Subject: Bitmap questions
  257. Message-ID: <0bYpdYe00UgK42mWl5@andrew.cmu.edu>
  258. Newsgroups: fa.think-c
  259. Lines: 10
  260. Date: 15 Jan 91 19:47:24 GMT
  261.  
  262. I want to use off-screen bitmaps to speed up some graphics programs I am
  263. working on.  Does anyone having clues on doing this, or even better,
  264. some source code?
  265.  
  266. Thanks,
  267.    Kevin Goldsmith
  268. kg1a+@andrew.cmu.edu
  269. kmg@isl1.ri.cmu.edu
  270.  
  271. Disclaimer: Disclaimer, I don't need no stinkin disclaimer.
  272. 
  273. 
  274. Path: ucivax!gateway
  275. From: ech@pegasus.att.COM
  276. Subject: Re: Calling methods from a code resource?
  277. Original-From: ech (Ned Horvath)
  278. Lines: 54
  279. Date: 15 Jan 91 22:55:35 GMT
  280. Message-ID: <9101151454.ab08185@ICS.UCI.EDU>
  281. In-Reply-To: your message <internet0152003520> of Tue Jan 15 19:14:52 GMT 1991
  282. >To: att!ics.uci.edu!think-c
  283. Content-Type: Text
  284. Content-Length: 3044
  285. Newsgroups: fa.think-c
  286. Message-Version: 2
  287. Email-Version: 2
  288. UA-Message-ID: <MAC-1.3.4A1-618034-ech-752>
  289. UA-Content-ID: <PMX-PC-2.01A-000144-pegasus1-ech-3357>
  290.  
  291. ------------ Original Message -------------
  292. I have a question regarding TCL. Can methods defined in an application
  293. be called from a code resource? For example, suppose I have a class
  294. foo with method func defined in an application program. Can I create a
  295. code resource that takes an instance of object foo as an argument and
  296. call the method func? Of course the code resource would require the
  297. prototype declaration for the class foo.
  298. ...
  299. Could someone give me some insight into how the Think C compiler
  300. implements method calls and if the above would work?
  301.  
  302. The reason that I would want to implement something like the above is
  303. that it allows code resources to be added that extend an applications
  304. abilities by accessing data and functions within the application
  305. without having to have the application source and recompile it...
  306. -------------------------------------------
  307. What you want to do is real hard unless you want to write some assembler
  308. language.  If you're willing to do that, yes.
  309.  
  310. What you want to do is possible, but has to be done very carefully.  ThinkC
  311. associates a type with an object by placing a 16-bit A5-relative offset at the
  312. beginning of the object.  Adding the offset to A5 gives the address of the
  313. dispatch table, which in turn maps message numbers into the jump table address
  314. for the specific method.  The last entry in the dispatch table points to the
  315. superclass dispatch table, which is how inherited methods are found.  To see
  316. the (assembler) code that uses this structure, look at __msg() in oops.c among
  317. your ThinkC library sources.
  318.  
  319. The problem is that the A5-relative offset that "defines" the type of the
  320. object is not going to be the same for your code resource as it is for your
  321. application, or for some other code resource.  Every project you link is, in
  322. general, going to assign the dispatch-table offsets differently and the
  323. message numbers differently.  Thus, although you can (by being cagy) find the
  324. dispatch table for the object, you can't even guess at the appropriate message
  325. number.  Oops (no pun intended).  What you can do for partial agreement is to
  326. link the class implementation with both the code resource AND the app.  Then,
  327. if your app passes an object to a code resource, the receiving code resource
  328. has to KNOW what the object's type is in advance.  This allows the code
  329. resource to call bless (object_reference, type), do its thing, then send it
  330. back to the application (which has to bless it back).  Or, the code resource
  331. has to remember the 16-bit magic offset, bless, use, then restore the 16-bit
  332. magic offset used by the application.
  333.  
  334. Of course, if the app passes an object which is a member of a SUBCLASS, the
  335. code resource won't know that, and won't have access to the specialized
  336. methods of that class.  So you don't get the full notion of "polymorphism"
  337. when you do this (and will probably introduce errors in the process).  In
  338. short, the app and code resource have to agree, in advance, on the EXACT type
  339. of the passed object.
  340.  
  341. Hope that helps.
  342.  
  343. =Ned Horvath=
  344. ehorvath@attmail.com
  345. 
  346. 
  347. Path: ucivax!gateway
  348. From: bin@primate.wisc.edu (Brain in Neutral)
  349. Subject: THINK C Gestalt interface
  350. Message-ID: <9101152254.AA19916@rhesus.primate.wisc.edu>
  351. Newsgroups: fa.think-c
  352. Lines: 4
  353. Date: 15 Jan 91 22:56:16 GMT
  354.  
  355. Anyone got the Gestalt codes laying around for use with THINK C?
  356.  
  357. Paul DuBois
  358. dubois@primate.wisc.edu
  359. 
  360. 
  361. Path: ucivax!gateway
  362. From: nick@lfcs.edinburgh.ac.UK (Nick Rothwell)
  363. Subject: Re: Midi Questions
  364. Message-ID: <23364.9101160957@subnode.lfcs.ed.ac.uk>
  365. Newsgroups: fa.think-c
  366. Lines: 22
  367. Date: 16 Jan 91 10:17:17 GMT
  368.  
  369. >Does anyone have any info on the MIDI manager, or know where I can get
  370. >some?
  371.  
  372. The documentation and software comes from APDA. I recently posted my MIDI
  373. Manager interface code to the list archive machine - the announcement went
  374. out about a month ago on this list. Did nobody notice?
  375.  
  376. >Also, I have heard that it isn't that great.
  377.  
  378. From whom? I don't have any serious problems with it.
  379.  
  380. >Does anyone know
  381. >about the protocols that the opcode boxes use?  Are they in printer
  382. >events or what?
  383.  
  384. I don't know anything about the Opcode boxes. Which Opcode boxes? As far as
  385. I know, they're all dumb interfaces (plus, perhaps, SMPTE h/ware).
  386.  
  387. I have, somewhere, the protocol specs. for MOTU's MIDI Time Piece, but the
  388. info isn't presently of much use to MIDI Manager programmers.
  389.  
  390. Nick.
  391. 
  392. 
  393. Path: ucivax!gateway
  394. From: siegel@das.harvard.edu (Rich Siegel)
  395. Subject: Re: Calling methods from a code resource?
  396. Message-ID: <9101161758.AA10002@endor.harvard.edu>
  397. Newsgroups: fa.think-c
  398. Lines: 16
  399. Date: 16 Jan 91 18:04:17 GMT
  400.  
  401.  
  402. In principle, what you describe is correct, but there are two really big
  403. caveats:
  404.  
  405. 1) The Class ID (the 16-bit A5-relative offset to the class info proc's
  406. jumptable entry) can (and often will) be different for different *compiles*,
  407. let alone different projects.
  408.  
  409. 2) The class ID will not always be a 16-bit A5-relative offset; to support
  410. the large jumptable model, it'll be a 32-bit value which is fixed up at
  411. runtime. Any externals which depend on it being a 16-bit offset will break.
  412.  
  413. It seems to me that the only surefire way to go is to support class
  414. instantiation and message passing by name.
  415.  
  416. R.
  417. 
  418. 
  419. Path: ucivax!gateway
  420. From: ech@pegasus.att.COM
  421. Subject: Re: Problem with GetString? Or is it me?
  422. Original-From: ech (Ned Horvath)
  423. Lines: 34
  424. Date: 18 Jan 91 18:06:17 GMT
  425. Message-ID: <9101181002.aa09424@ICS.UCI.EDU>
  426. In-Reply-To: your message <attbl0180221360> of Thu Jan 17 13:18:00 EST 1991
  427. >To: att!ics.uci.edu!think-c
  428. Content-Type: Text
  429. Content-Length: 1355
  430. Newsgroups: fa.think-c
  431. Message-Version: 2
  432. Email-Version: 2
  433. UA-Message-ID: <MAC-1.3.4A1-618034-ech-769>
  434. UA-Content-ID: <PMX-PC-2.01A-000144-pegasus1-ech-3403>
  435.  
  436. ------------ Original Message -------------
  437. Ned:
  438.  
  439. My copy of Inside Mac claims that GetResource will load the resource
  440. into memory if it isn't there already.  Why should I do an explicit
  441. LoadResource, or is Inside Mac wrong in this case (it has been wrong in
  442. a few others, so it might be...).
  443.  
  444. ()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
  445. D. Jay Newman          !  That is not dead which can eternal lie
  446. dn5@psuvm.psu.edu      !  And with strange eons even death can die
  447. CBEL--Teaching and Learning Technologies Group
  448. --------- End of Original Message ---------
  449.  
  450. I stand corrected: obviously I've been more paranoid than I need to be.
  451.  
  452. My experience is that IM rarely lies, and I expect you're correct.  No doubt
  453. I've had problems in the past where I retained handles to purgeable resources,
  454. and neglected to call LoadResource before use.
  455.  
  456. Notice that if SetResLoad (FALSE) has been called, GetResource DOES return a
  457. handle to a NIL master pointer.  I have used a sequence like
  458.         SetResLoad (FALSE);
  459.         theHandle = Get1Resource (type, id);
  460.         SetResLoad (TRUE);
  461. to discover if the resource exists without actually loading it.  'theHandle'
  462. remains valid even if the resource gets purged, and
  463.         LoadResource (theHandle);
  464. will 'do the right thing.'
  465.  
  466. Sorry to cause confusion.
  467.  
  468. =Ned Horvath=
  469. ehorvath@attmail.com
  470. 
  471. 
  472. Path: ucivax!gateway
  473. From: mk2o+@andrew.cmu.edu (Mohammad Ibrahim Kilani)
  474. Subject: Req. Sample Code for user interface
  475. Message-ID: <UbZrMQ_00UhWM3I5N5@andrew.cmu.edu>
  476. Newsgroups: fa.think-c
  477. Lines: 9
  478. Date: 18 Jan 91 22:33:57 GMT
  479.  
  480. Hello every body!
  481.  
  482. I am looking for sample code in Think C that shows how to use QuickDraw
  483. routines to perform simple drawing of geometric objects including
  484. dragging and resizing.  Think C disk has a demo that shows how to do
  485. paint funcions but does not allow dragging objects or resizing of drawn
  486. objects.
  487.  
  488. Any hint to public or commercial source will be appreciated.
  489. 
  490. 
  491. Path: ucivax!gateway
  492. From: schabtac@spot.colorado.edu (SCHABTACH ADAM)
  493. Subject: Drawing at interrupt time
  494. Message-ID: <9101192116.AA02490@spot.Colorado.EDU>
  495. Newsgroups: fa.think-c
  496. Lines: 11
  497. Date: 19 Jan 91 21:17:30 GMT
  498.  
  499.  
  500. Anyone know the best way to force a Pane to redraw its contents at interrupt
  501. time? I need to change the contents of a Pane during an interrupt service
  502. routine (for the MIDI Manager); I can't wait for an update event to redraw
  503. it for me. This has to take place without colliding with other graphical
  504. operations, since the user could be manipulating a control or causing other
  505. drawing activity when the interrupt occurs.
  506.  
  507. Thanks in advance for any suggestions.
  508.  
  509. --Adam
  510. 
  511. 
  512. Path: ucivax!gateway
  513. From: schabtac@spot.colorado.edu (SCHABTACH ADAM)
  514. Subject: Re:  Drawing at interrupt time
  515. Message-ID: <9101200136.AA15347@spot.Colorado.EDU>
  516. Newsgroups: fa.think-c
  517. Lines: 8
  518. Date: 20 Jan 91 01:39:12 GMT
  519.  
  520.  
  521. Thanks to Rich and Juri for pointing out to me that I simply can't do any
  522. drawing at interrupt time, like it or not. I should've realized that;
  523. maybe I've been programming too much recently. :-)
  524.  
  525. So much for my nifty animation. :-)
  526.  
  527. --Adam
  528. 
  529. 
  530. Path: ucivax!gateway
  531. From: mrose@cheetah.ca.psi.COM (Marshall Rose)
  532. Subject: Accessing QuickDraw globals from a DA
  533. Message-ID: <8393.664523776@cheetah.ca.psi.com>
  534. Newsgroups: fa.think-c
  535. Lines: 10
  536. Date: 22 Jan 91 06:04:51 GMT
  537.  
  538. I'm now in the position of having to write a DA that needs access to a
  539. couple of the QuickDraw globals (i.e., arrow and screenBits).
  540.  
  541. What is the cleanest way of doing this?  The THINK C manual suggests
  542. using some inline assembly, but a brief example would go a long way
  543. towards making things a lot clearer.
  544.  
  545. Thanks,
  546.  
  547. /mtr
  548. 
  549. 
  550. Path: ucivax!gateway
  551. From: resnick@cogsci.uiuc.edu (Pete Resnick)
  552. Subject: Re: Accessing QuickDraw globals from a DA
  553. Message-ID: <9101220808.AA05695@tarski.cogsci.uiuc.edu>
  554. In-Reply-To: <8393.664523776@cheetah.ca.psi.com>; from "Marshall Rose" at Jan 22, 91 6:04 am
  555. X-Mailer: ELM [version 2.3 PL2]
  556. Newsgroups: fa.think-c
  557. Lines: 28
  558. Date: 22 Jan 91 08:10:31 GMT
  559.  
  560. Marshall Rose writes:
  561. >
  562. > I'm now in the position of having to write a DA that needs access to a
  563. > couple of the QuickDraw globals (i.e., arrow and screenBits).
  564. >
  565. > What is the cleanest way of doing this?  The THINK C manual suggests
  566. > using some inline assembly, but a brief example would go a long way
  567. > towards making things a lot clearer.
  568. >
  569. I don't know how clear this is, but here's what I do:
  570.  
  571. I first #define CURRQDVAR as such:
  572.  
  573. (*(QDVarRecPtr)(*(long *)(CurrentA5) - (sizeof(QDVarRec) - sizeof(thePort))))
  574.  
  575. Then I refer to fields in it, for example:
  576.  
  577. CURR_QDVAR.gray
  578.  
  579. I think this all works.
  580.  
  581. pr
  582. --
  583. Pete Resnick             (...so what is a mojo, and why would one be rising?)
  584. Graduate assistant - Philosophy Department, Gregory Hall, UIUC
  585. System manager - Cognitive Science Group, Beckman Institute, UIUC
  586. Internet/ARPAnet/EDUnet  : resnick@cogsci.uiuc.edu
  587. BITNET (if no other way) : FREE0285@UIUCVMD
  588. 
  589. 
  590. Path: ucivax!gateway
  591. From: jbr@cblph.att.COM
  592. Subject: Questions About USing TCL
  593. Message-ID: <9101220503.aa13432@ICS.UCI.EDU>
  594. Newsgroups: fa.think-c
  595. Original-From: j.a.brownlee
  596. Lines: 36
  597. Date: 22 Jan 91 13:07:37 GMT
  598.  
  599. Hi, folks.  Let me start off by saying thaty this mailing list is great.  I've
  600. gotten a lot of useful tips and info from it.  Now down to business...
  601.  
  602. I have been using Think C for about 4 years now, but I just recently decided
  603. to try using the TCL.  I have experience with AT&T C++ 2.0, so Think C's OOP
  604. stuff is quite a change.  I am having a couple of problems that are probably
  605. easily solved, and I have RTFM, but perhaps I missed something.  I am using
  606. TC 4.0.2 under 6.0.3 on an 8MB IIcx.
  607.  
  608. I started by making a copy of the Starter Project.  Using the manual and the
  609. comments in the code as a guide, I began filling in the functionality.  I am
  610. having these problems so far, and I defer to you TCL Masters out there!
  611.  
  612.    .    I filled in CStarterPane::Draw() and my window draws fine when an
  613.     update event comes along.  The problem is they don't seem to come
  614.     along often enough.  How do I force one?  There is a Refresh() method
  615.     in the CPane class, but when I make a change to my data, how do I
  616.     call the method from an "alien" file?  Or should I just use good 'ol
  617.     InvalRect() directly?
  618.  
  619.    .    I have my windows defined via ResEdit and using the #1234 scheme to
  620.     set the command numbers.  The manual says I should handle as many
  621.     commands as possible inside the CStarterDoc version of DoCommand().
  622.     Still, sometimes I don't get a command indication when I select
  623.     certain menu items.  They seem to be defined correctly.  Any hints?
  624.  
  625.    .    Any advice on what scheme to use to save my data into the file?  I
  626.     generally have used fopen() and friends from the ANSI library in the
  627.     past.  Can I/Should I still do this?
  628.  
  629. Thanks a 10^6, everyone!
  630.  
  631.    -      _   Joe Brownlee, Analysts International Corp. @ AT&T Network Systems
  632.   /_\  @ / `  471 E Broad St, Suite 1610, Columbus, Ohio 43215   (614) 860-7461
  633.  /   \ | \_,  E-mail: jbr@cblph.att.com     Who pays attention to what _I_ say?
  634.  "Scotty, we need warp drive in 3 minutes or we're all dead!" --- James T. Kirk
  635. 
  636. 
  637. Path: ucivax!gateway
  638. From: minow@bolt.enet.dec.COM ("Martin Minow, ML3-5/U26  22-Jan-1991 1128")
  639. Subject: Problem with selection in a scroll panorama
  640. Message-ID: <9101221812.AA11500@decpa.pa.dec.com>
  641. Newsgroups: fa.think-c
  642. Lines: 454
  643. Date: 22 Jan 91 18:19:05 GMT
  644.  
  645. You'll find attached a semi-working "ListManager" replacement class.
  646. The list part works fine, but there's one tiny bug -- if you select
  647. something, scroll the selection pane, then select something else,
  648. hiliting gets very messed up.  I've stared at this until I'm blue
  649. in the face, but haven't spotted the no-doubt trivial bug.  Eternal
  650. gratitude to whoever discovers it first.
  651.  
  652. By the way, you're welcome to use this in your programs, but I retain
  653. the copyright -- it might end up in a MacTutor article someday.
  654.  
  655. Martin Minow
  656. minow@bolt.enet.dec.com
  657. ps: I fiddled with formatting here and there -- don't be suprised
  658. if there are minor syntax (etc) errors in this code.
  659.  
  660. ---- ListSelector.h ----
  661. /*
  662.  * ListSelector
  663.  *    SuperClass: CSelector
  664.  *
  665.  * Copyright 1991 Martin Minow.  All rights reserved.
  666.  *
  667.  * ListSelector mimics a (stripped-down)
  668.  * Macintosh ListManager class.  It is limited to
  669.  * a single "column" - though it can easily be
  670.  * extended to multiple columns.  It borrows
  671.  * heavily from several items in the "More Classes"
  672.  * folder: CSelector (with code taken from
  673.  * CGridSelector).
  674.  *
  675.  * The ListSelector consists of a ScrollPane
  676.  * containing a CSelector Panorama and an
  677.  * associated CList.
  678.  *
  679.  * You must override the DrawItem method.
  680.  */
  681. #define _H_ListSelector
  682. #include <CScrollPane.h>
  683. #include <CPanorama.h>
  684. #include <CSelector.h>
  685. #include <CList.h>
  686.  
  687. struct ListSelector : CSelector {
  688.     CList        *itsList;
  689.     long        itsDoubleClickCmd;
  690.  
  691.     void        IListSelector(
  692.         CView        *anEnclosure,
  693.         CBureaucrat        *aSupervisor,
  694.         short        aWidth,
  695.         short        aHeight,
  696.         short        aHEncl,
  697.         short        aVEncl,
  698.         SizingOption    aHSizing,
  699.         SizingOption    aVSizing,
  700.         short        aCommandBase,
  701.         long        aDoubleClickCmd,
  702.         short        aBoxHeight
  703.     );
  704.     void        Dispose(void);
  705.     void        DoDoubleClick(void);
  706.     void        Draw(
  707.         Rect        *area
  708.     );
  709.     void        DrawItem(    /* OVERRIDE */
  710.         short        anItem,
  711.         Rect        *area
  712.     );
  713.     void        Remove(
  714.         CObject        *theObject
  715.     );
  716.     void        Append(
  717.         CObject        *theObject
  718.     );
  719.     void        AdjustBounds(void);
  720.     CObject        *NthItem(
  721.         short        itemNo
  722.     );
  723.     long        GetNumItems(void);
  724.     void        HiliteItem(
  725.         short        theItem,
  726.         HiliteState        state
  727.     );
  728.     short        FindItem(
  729.         Point        hitPt
  730.     );
  731.     void        FindItemBox(
  732.         short        anItem,
  733.         Rect        *itemBox
  734.     );
  735.     void        PaneToPanorama(
  736.         Point        *hitPt
  737.     );
  738.     void        PanoramaToPaneR(
  739.         Rect        *theRect
  740.     );
  741.     void        PanoramaToPane(
  742.         Point        *thePt
  743.     );
  744. };
  745. ------ ListSelector.c ----
  746. /*
  747.  * ListSelector
  748.  *    SuperClass:    CSelector
  749.  *
  750.  * Copyright 1991 Martin Minow.  All rights reserved.
  751.  *
  752.  */
  753. #include "ListSelector.h"
  754. #include <CBorder.h>
  755.  
  756. /*
  757.  * IListSelector
  758.  * Create the list.  Parameters mostly follow CScrollPane.
  759.  * The additional parameters are:
  760.  *    aCommandBase    See MoreClasses: CSelector
  761.  *    aDoubleClickCmd    Passed to the supervisor on double-clicks.
  762.  *    aBoxHeight    Height of each cell in pixels.
  763.  * When you layout your list, make sure you leave
  764.  * room for a boarder.  I.e., if each cell is 10 pixels tall, and
  765.  * you want 5 cells on the screenn aHeight should be (10 * 5) + 2.
  766.  */
  767. void
  768. ListSelector::IListSelector(
  769.     CView        *anEnclosure,
  770.     CBureaucrat    *aSupervisor,
  771.     short        aWidth,
  772.     short        aHeight,
  773.     short        aHEncl,
  774.     short        aVEncl,
  775.     SizingOption    aHSizing,
  776.     SizingOption    aVSizing,
  777.     short        aCommandBase,
  778.     long        aDoubleClickCmd,
  779.     short        aBoxHeight
  780.     )
  781. {
  782.     CScrollPane    *aScrollPane;
  783.     CBorder        *aBorder;
  784.     Rect        theBox;
  785.  
  786.     aScrollPane = new(CScrollPane);
  787.     aScrollPane->IScrollPane(
  788.         anEnclosure,
  789.         aSupervisor,
  790.         aWidth,
  791.         aHeight,
  792.         aHEncl,
  793.         aVEncl,
  794.         aHSizing,
  795.         aVSizing,
  796.         FALSE,        /* No horizontal scroll    */
  797.         TRUE,        /* Vertical scroll    */
  798.         FALSE        /* No Size box        */
  799.     );
  800.     /*
  801.      * Create the boarder, adjusting it so it lines
  802.      * up with the scroll bar.
  803.      */
  804.     aBorder = new(CBorder);
  805.     aBorder->IBorder(
  806.         aScrollPane,
  807.         aSupervisor,
  808.         1, 1, 0, 0,
  809.         sizELASTIC,
  810.         sizELASTIC
  811.     );
  812.     aBorder->FitToEnclosure(TRUE, TRUE);
  813.     SetRect(&theBox, -1, -1, 1, 0);
  814.     aBorder->ChangeSize(&theBox, FALSE);
  815.     aBorder->SetWantsClicks(TRUE);
  816.     /*
  817.      * Create the Selector within the boarder.
  818.      */
  819.     inherited::ISelector(
  820.         aBorder,
  821.         aSupervisor,
  822.         1, 1, 0, 0,    /* Dummy shape param's    */
  823.         sizELASTIC,
  824.         sizELASTIC,
  825.         0,        /* No items yet        */
  826.         NOTHING,    /* No item selected yet    */
  827.         aCommandBase
  828.     );
  829.     itsDoubleClickCmd = aDoubleClickCmd;
  830.     FitToEnclosure(TRUE, TRUE);
  831.     /*
  832.      * Connect the Panorama parts together.
  833.      */
  834.     SetScrollPane(aScrollPane);
  835.     itsScrollPane->InstallPanorama(this);
  836.     SetScales(aWidth, aBoxHeight);
  837.     itsList = new(CList);
  838.     itsList->IList();
  839. }
  840.  
  841. /*
  842.  * Dispose
  843.  * Dispose of the list.  The Boarder, ScrollPane, and
  844.  * Selector are disposed of automatically (I hope).
  845.  */
  846. void
  847. ListSelector::Dispose()
  848. {
  849.     itsList->Dispose();
  850.     inherited::Dispose();
  851. }
  852.  
  853. /*
  854.  * DoDoubleClick
  855.  * Pass a double-click to the supervisor.
  856.  */
  857. void
  858. ListSelector::DoDoubleClick()
  859. {
  860.     itsSupervisor->DoCommand(itsDoubleClickCmd);
  861. }
  862.  
  863. /*
  864.  * Draw
  865.  * ** Is this causing the multiple-hilight problem? **
  866.  */
  867. void
  868. ListSelector::Draw(
  869.     Rect    *area
  870.     )
  871. {
  872.     int        i;
  873.     Rect        theBox;
  874.  
  875.     for (i = 1; i <= numItems; i++) {
  876.         FindItemBox(i, &theBox);
  877.         DrawItem(i, &theBox);
  878.     }
  879.     if (active)
  880.         HiliteItem(selection, hiliteON);
  881. }
  882.  
  883. /*
  884.  * DrawItem
  885.  * Draw a single item in this location.
  886.  * Your ListSelector sub-class must override this
  887.  * to draw the list contents.
  888.  */
  889. void
  890. ListSelector::DrawItem(        /* OVERRIDE    */
  891.     short    anItem,
  892.     Rect    *area
  893.     )
  894. {
  895. #if 0
  896.     /*
  897.      * Sample DrawItem -- a StringObject is
  898.      * an object that holds a StringHandle.
  899.      */
  900.     StringObject        *aString;
  901.     StringHandle        theDatum;
  902.     FontInfo        info;
  903.     SignedByte        handleState;
  904.  
  905.     aString = (StringObject *) NthItem(anItem);
  906.     if (aString != NULL) {
  907.         theDatum = aString->GetStringHandle();
  908.         if (theDatum != NULL) {
  909.         GetFontInfo(&info);
  910.         MoveTo(
  911.             area->left + 2,
  912.             area->top + info.ascent
  913.         );
  914.         handleState = HGetState((Handle) theDatum);
  915.         HLock((Handle) theDatum);
  916.         DrawString(*theDatum);
  917.         HSetState((Handle) theDatum, handleState);
  918.         }
  919.     }
  920. #endif
  921. }
  922.  
  923. /*
  924.  * List Methods.  These could easily be extended
  925.  * to allow more ListManager capability.  They don't do
  926.  * much more than call the CList and fiddle the
  927.  * Selector extent.
  928.  *
  929.  */
  930. void
  931. ListSelector::Remove(
  932.     CObject    *theObject
  933.     )
  934. {
  935.     itsList->Remove(theObject);
  936.     --numItems;
  937.     AdjustBounds();
  938. }
  939.  
  940. void
  941. ListSelector::Append(
  942.     CObject    *theObject
  943.     )
  944. {
  945.     itsList->Append(theObject);
  946.     numItems++;
  947.     AdjustBounds();
  948. }
  949.  
  950. void
  951. ListSelector::AdjustBounds()
  952. {
  953.     Rect        bounds;
  954.  
  955.     GetBounds(&bounds);
  956.     bounds.bottom = bounds.top + GetNumItems();
  957.     SetBounds(&bounds);
  958. }
  959.  
  960. CObject *
  961. ListSelector::NthItem(
  962.     short        itemNo
  963.     )
  964. {
  965.     return (itsList->NthItem(itemNo));
  966. }
  967.  
  968. long
  969. ListSelector::GetNumItems()
  970. {
  971.     return (itsList->GetNumItems());
  972. }
  973.  
  974. /*
  975.  * HiliteItem is taken more-or-less from
  976.  * CGridSelector.
  977.  */
  978. void
  979. ListSelector::HiliteItem(
  980.     short    theItem,
  981.     HiliteState    state
  982.     )
  983. {
  984.     Rect        itemBox;
  985.     long        ticks;
  986.  
  987.     if (theItem == NOTHING)
  988.         return;
  989.     FindItemBox(theItem, &itemBox);
  990.     Prepare();
  991.     switch (state) {
  992.     case hiliteON:
  993.     case hiliteOFF:
  994.         HiliteMode &= ~(1 << hiliteBit);    /* IM V-62    */
  995.         InvertRect(&itemBox);
  996.         break;
  997.     case hiliteDYNAMIC:
  998.         PenNormal();
  999.         PenMode(patXor);
  1000.         FrameRect(&itemBox);
  1001.         Delay(2, &ticks);
  1002.         InsetRect(&itemBox, 1, 1);
  1003.         FrameRect(&itemBox);
  1004.         Delay(2, &ticks);
  1005.         InsetRect(&itemBox, -1, -1);
  1006.         FrameRect(&itemBox);
  1007.         PenNormal();
  1008.         break;
  1009.     }
  1010. }
  1011.  
  1012. /*
  1013.  * Determine the item covered by hitPt.
  1014.  * Return NOTHING if nothing is specified.
  1015.  * hitPt is in Pane coordinates.
  1016.  */
  1017. short
  1018. ListSelector::FindItem(
  1019.     Point    hitPt
  1020.     )
  1021. {
  1022.     register short    itemNo;
  1023.  
  1024.     PaneToPanorama(&hitPt);
  1025.     itemNo = hitPt.v + 1;
  1026.     if (itemNo < 1 || itemNo > GetNumItems())
  1027.         return (NOTHING);
  1028.     else {
  1029.         return (itemNo);
  1030.     }
  1031. }
  1032.  
  1033. /*
  1034.  * Given an item number, find the Pane coordinates
  1035.  * that enclose this item.
  1036.  */
  1037. void
  1038. ListSelector::FindItemBox(
  1039.     short    anItem,
  1040.     Rect    *itemBox
  1041.     )
  1042. {
  1043.     SetRect(itemBox, 0, anItem - 1, 1, anItem);
  1044.     PanoramaToPaneR(itemBox);
  1045. }
  1046.  
  1047. /*
  1048.  * Convert a Point from Prame coordinates to Panorama
  1049.  * units -- this should be a CPanorama method.
  1050.  */
  1051. void
  1052. ListSelector::PaneToPanorama(
  1053.     Point    *hitPt
  1054.     )
  1055. {
  1056.     short    theHScale, theVScale;
  1057.     Point    thePosition;
  1058.  
  1059.     GetScales(&theHScale, &theVScale);
  1060.     GetPosition(&thePosition);
  1061.     hitPt->h /= theHScale;
  1062.     hitPt->h += thePosition.h;
  1063.     hitPt->v /= theVScale;
  1064.     hitPt->v += thePosition.v;
  1065. }
  1066.  
  1067. /*
  1068.  * Convert a Rect from Panorama units to Pane units.
  1069.  */
  1070. void
  1071. ListSelector::PanoramaToPaneR(
  1072.     Rect    *theRect
  1073.     )
  1074. {
  1075.     PanoramaToPane(&topLeft(*theRect));
  1076.     PanoramaToPane(&botRight(*theRect));
  1077. }
  1078.  
  1079. /*
  1080.  * Convert a Point from Panorama units to Pane units.
  1081.  */
  1082. void
  1083. ListSelector::PanoramaToPane(
  1084.     Point    *thePt
  1085.     )
  1086. {
  1087.     short    theHScale, theVScale;
  1088.     Point    thePosition;
  1089.  
  1090.     GetScales(&theHScale, &theVScale);
  1091.     GetPosition(&thePosition);
  1092.     thePt->h -= thePosition.h;
  1093.     thePt->h *= theHScale;
  1094.     thePt->v -= thePosition.v;
  1095.     thePt->v *= theVScale;
  1096. }
  1097.  
  1098. ----- end -----
  1099. 
  1100. 
  1101. Path: ucivax!gateway
  1102. From: mrose@cheetah.ca.psi.COM (Marshall Rose)
  1103. Subject: Re: Accessing QuickDraw globals from a DA
  1104. Message-ID: <3729.664573628@cheetah.ca.psi.com>
  1105. In-Reply-To: Your message of Tue, 22 Jan 91 02:07:58 -0600.
  1106.              <9101220808.AA05695@tarski.cogsci.uiuc.edu>
  1107. Newsgroups: fa.think-c
  1108. Lines: 17
  1109. Date: 22 Jan 91 19:56:59 GMT
  1110.  
  1111. Thanks.  Since I can't find QDVarRec in the #include files, I suppose
  1112. one should define it as
  1113.  
  1114.     typedef struct QDVarRec {
  1115.         GrafPtr    thePort;
  1116.         Pattern    white;
  1117.         Pattern    black;
  1118.         Pattern    gray;
  1119.         Pattern    ltGray;
  1120.         Pattern    dkGray;
  1121.         Cursor    arrow;
  1122.         BitMap    screenBits;
  1123.         long    randSeed;
  1124.     }    QDVarRec, *QDVarRecPtr;
  1125.  
  1126. /mtr
  1127.  
  1128. 
  1129. 
  1130. Path: ucivax!gateway
  1131. From: nick@lfcs.edinburgh.ac.UK (Nick Rothwell)
  1132. Subject: Re: Drawing at interrupt time
  1133. Message-ID: <3941.9101211116@subnode.lfcs.ed.ac.uk>
  1134. Newsgroups: fa.think-c
  1135. Lines: 21
  1136. Date: 22 Jan 91 20:24:01 GMT
  1137.  
  1138. >Anyone know the best way to force a Pane to redraw its contents at interrupt
  1139. >time? I need to change the contents of a Pane during an interrupt service
  1140. >routine (for the MIDI Manager); I can't wait for an update event to redraw
  1141. >it for me. This has to take place without colliding with other graphical
  1142. >operations, since the user could be manipulating a control or causing other
  1143. >drawing activity when the interrupt occurs.
  1144.  
  1145. Hi Adam,
  1146.    Suggestion #1 - don't do it. If you need to to graphics out of the event
  1147. loop (e.g. during a MouseDown() run), then I suggest you do nothing more
  1148. adventurous than having the interrupt routine set a global semaphore and
  1149. having your spin-wait in the drag routine look at it and do the drawing if
  1150. required.
  1151.  
  1152. You could perhaps do graphics directly by writing into the on-screen
  1153. bitmap, but this will screw things like CloseView (and window overlaps),
  1154. and probably be extraordinarily messy when dealing with multi-plane colour.
  1155.  
  1156. Don't cross the streams...
  1157.  
  1158. Nick.
  1159. 
  1160. 
  1161. Path: ucivax!gateway
  1162. From: Tom_Johnson@chip.cs.ucla.edu (Tom Johnson)
  1163. Subject: CommToolbox and Think C
  1164. Message-ID: <9101221438.aa19438@ICS.UCI.EDU>
  1165. Newsgroups: fa.think-c
  1166. Lines: 10
  1167. Date: 22 Jan 91 22:43:36 GMT
  1168.  
  1169.                CommToolbox and Think C
  1170. Does anybody anywhere have a copy of the CommToolbox header files converted to
  1171. Think C?
  1172.  
  1173. Thanks---
  1174.  
  1175. Tom
  1176. tj@cs.ucla.edu
  1177.  
  1178.  
  1179. 
  1180. 
  1181. Path: ucivax!gateway
  1182. From: isler@grad1.cis.upenn.edu (Sylvia-Kay Isler)
  1183. Subject: MacDraw Object Selection: How does it work?
  1184. Message-ID: <9101240408.AA27729@grad1.cis.upenn.edu>
  1185. Posted-Date: Wed, 23 Jan 91 23:08:35 EST
  1186. Newsgroups: fa.think-c
  1187. Lines: 14
  1188. Date: 24 Jan 91 05:02:11 GMT
  1189.  
  1190.  
  1191. Hi,
  1192.  
  1193. I am writing a MacDraw-like application in which I would like to allow
  1194. the user to select objects by merely clicking the mouse on a given
  1195. object.
  1196.  
  1197. Does anyone out there know how MacDraw does this or have any suggestions
  1198. about the correct data structure and methods for allowing the user
  1199. to select objects by clicking?
  1200.  
  1201. Thanks,
  1202.  
  1203. Sylvia
  1204. 
  1205. 
  1206. Path: ucivax!gateway
  1207. From: jbr@cblph.att.COM
  1208. Subject: Can new() fail?
  1209. Message-ID: <9101240859.aa02323@ICS.UCI.EDU>
  1210. Newsgroups: fa.think-c
  1211. Original-From: j.a.brownlee
  1212. Lines: 32
  1213. Date: 24 Jan 91 17:02:44 GMT
  1214.  
  1215. Another question about Think C's OOP extensions.  I have been having a strange
  1216. problem creating some objects with new().  You know, one of those fun ones
  1217. where when you add debug, it vanishes!
  1218.  
  1219. According to the manual, the new() function takes a Class type argument and
  1220. returns a Handle for the object (remember, the OOP stuff does a "free"
  1221. dereference for you):
  1222.  
  1223.     myObj = ((ObjType *)new(ObjType));
  1224.  
  1225. My question is: can this fail and return a NIL pointer?  Presumably, this is
  1226. implemented via NewPtr() and can fail.  The manual suggests that you should
  1227. tack your Init() method call onto the above, with Init() returning "this":
  1228.  
  1229.     myObj = ((ObjType *)new(ObjType))->Init();
  1230.  
  1231. ...but what if the returned Handle is NIL?  Bomb city!
  1232.  
  1233. My problem was a result of some code like the above that allocates space for
  1234. a 32x32 matrix of objects.  Somehow, though myObj[9][28] was not == 0L, if I
  1235. checked on the next line, object [9][28]'s Handle was == 0L!  That object and
  1236. only that object's handle was somehow toasted!  When I moved the Init() call
  1237. to a seprate line after cheking to see if myObj[][] is 0L, the problem
  1238. vanished.
  1239.  
  1240. Has anyone had a similar problem?  How does everyone do error checking on
  1241. Handles allocated via new()?  Any advice?
  1242.  
  1243.    -      _   Joe Brownlee, Analysts International Corp. @ AT&T Network Systems
  1244.   /_\  @ / `  471 E Broad St, Suite 1610, Columbus, Ohio 43215   (614) 860-7461
  1245.  /   \ | \_,  E-mail: jbr@cblph.att.com     Who pays attention to what _I_ say?
  1246.  "Scotty, we need warp drive in 3 minutes or we're all dead!" --- James T. Kirk
  1247. 
  1248. 
  1249. Path: ucivax!gateway
  1250. From: FLEMINGM@qucdn.queensu.ca ("R. Mark Fleming")
  1251. Subject: re: MacDraw type Objects
  1252. Message-ID: <9101241057.aa17320@ICS.UCI.EDU>
  1253. Newsgroups: fa.think-c
  1254. Lines: 21
  1255. Date: 24 Jan 91 18:59:13 GMT
  1256.  
  1257. Objects are stored in a link list.  Grouped object are also stored in the
  1258. same list, where the Group Object point's to another list of the objects
  1259. grouped. Ungrouping objects you merge the sub list into the current list.
  1260.  
  1261. ie.
  1262.           <Text obj.> -> <Line Obj.> -> <Group Object> -> <line obj.>  -> nil
  1263.                                            |
  1264.                                            |
  1265.                                            +-> <line obj> -> <Rect Obj.> -> nil
  1266.  
  1267. This also controls which object is infront of which object.
  1268. Move Forward, Move Back, Move to Front, Move to Back all just reorder the list.
  1269.  
  1270.  
  1271. Hope this helps,
  1272. Mark Fleming
  1273. <<<<<<<<<<<<<<<=========================================>>>>>>>>>>>>>>>>>
  1274. Mark Fleming, Macintosh Support, Office Systems, Computing  & Communicat.
  1275. Services, Queen's University at Kingston, Phone: (613) 545-2039
  1276. Bitnet: FLEMINGM@QUCDN  or  Mark.Fleming@QueensU.CA    AppleLink: CDA0448
  1277. <<<<<<<<<<<<<<<=========================================>>>>>>>>>>>>>>>>>
  1278. 
  1279. 
  1280. Path: ucivax!gateway
  1281. From: ech@pegasus.att.COM
  1282. Subject: Re: Can new() fail?
  1283. Original-From: ech (Ned Horvath)
  1284. Lines: 50
  1285. Date: 25 Jan 91 20:07:21 GMT
  1286. Message-ID: <9101250922.aa29191@ICS.UCI.EDU>
  1287. In-Reply-To: your message <internet0242029580> of Thu Jan 24 17:02:44 GMT 1991
  1288. >To: att!ics.uci.edu!think-c
  1289. Content-Type: Text
  1290. Content-Length: 2195
  1291. Newsgroups: fa.think-c
  1292. Message-Version: 2
  1293. Email-Version: 2
  1294. UA-Message-ID: <MAC-1.3.4A1-618034-ech-780>
  1295. UA-Content-ID: <PMX-PC-2.01A-000144-pegasus1-ech-3479>
  1296.  
  1297. > According to the manual, the new() function takes a Class type argument and
  1298. > returns a Handle for the object (remember, the OOP stuff does a "free"
  1299. > dereference for you):
  1300. >
  1301. >       myObj = ((ObjType *)new(ObjType));
  1302. >
  1303. > My question is: can this fail and return a NIL pointer?  Presumably, this is
  1304. > implemented via NewPtr() and can fail.
  1305.  
  1306. Yes, new() can return NIL.  Yes, you should check for it.  However, if you're
  1307. using the TCL, in particular CApplication, then you can afford to be a bit
  1308. less vigilant about checking every new() result.  For more details, read the
  1309. section "Memory management methods" under CApplication, Think C 4.0 manual, p.
  1310. 234.
  1311.  
  1312. > ...The manual suggests that you should
  1313. > tack your Init() method call onto the above, with Init() returning "this":
  1314. >
  1315. >       myObj = ((ObjType *)new(ObjType))->Init();
  1316. >
  1317. > ...but what if the returned Handle is NIL?  Bomb city!
  1318.  
  1319. You have two potential problems here.  Yes, you're dead if new returns nil,
  1320. but in fact the out-of-memory handling (at least in CApplications, see above)
  1321. will have already either freed enough memory to let the new() succeed, or will
  1322. have taken a longjmp to the top of your event loop, or will have taken the
  1323. app down, so in practice the call to the Init method never happens (it could
  1324. happen in a DRVR or code resource, where there's much less help for low memory
  1325. conditions).  If you're designing a class you hope to use in non-apps, it's
  1326. best to be vigilant.
  1327.  
  1328. The other problem is that you are assigning the value returned by Init(), not
  1329. the value returned by new().  So your Init procedure above had better be
  1330. declared
  1331.         ObjType * ObjType::Init (void)
  1332. and EVERY path through it has to end with either
  1333.         return this;    /* you must do this explicitly */
  1334. or
  1335.         return NIL;
  1336. Most of the TCL initializations return NIL, and to get the one-liner you're
  1337. looking for, you need something like
  1338.         (myObj = (ObjType *)new(ObjType))->Init();
  1339.         ^                               ^
  1340. Note the parens that assign the result of new(), and THEN use that reference
  1341. to invoke the Init() method.  Now Init() can return anything, including void.
  1342.  
  1343. Hope that helps.
  1344.  
  1345. =Ned Horvath=
  1346. ehorvath@attmail.com
  1347. 
  1348. 
  1349. Path: ucivax!gateway
  1350. From: nagel@ICS.UCI.EDU (Mark Nagel)
  1351. Subject: ARCHIVE: Gestalt interface
  1352. Message-ID: <25085.665004940@ics.uci.edu>
  1353. Newsgroups: fa.think-c
  1354. Reply-To: nagel@ICS.UCI.EDU
  1355. Organization: University of California, Irvine - Dept of ICS
  1356. Lines: 24
  1357. Date: 27 Jan 91 19:36:29 GMT
  1358. Phone: (714) 856-5039
  1359.  
  1360. Date: Fri, 25 Jan 91 15:33:52 est
  1361. From: Phil Shapiro <phils@chaos.cs.brandeis.EDU>
  1362. Subject: THINK C Gestalt interface
  1363.  
  1364. Here's a binhex'd Compactor archive of the files needed to use the
  1365. Gestalt Manager and Sound Input Manager with THINK C v4.0.  These
  1366. files are converted versions of the files Apple has released to let
  1367. programmers take advantage of these new features in System 6.0.7 and
  1368. System 7.0bX.
  1369.  
  1370. These files are the official conversions of the interfaces.  Since
  1371. they are based on interim technical documentation, they are not
  1372. guaranteed to work in later system versions.  The next major release
  1373. of THINK C will include final versions of these files.
  1374.  
  1375.     -phil
  1376. ----
  1377.    Phil Shapiro                           Technical Support Analyst
  1378.    Language Products Group                     Symantec Corporation
  1379.         Internet: phils@chaos.cs.brandeis.edu
  1380.  
  1381. ---------------- Gestalt_6.0.7Glue.cpt.hqx ----------------
  1382.  
  1383. [saved as: /mac/think-c/compiler/gestalt.hqx; 20K]
  1384. 
  1385. 
  1386. Path: ucivax!gateway
  1387. From: eyiskis@polyslo.calpoly.edu (Eric Yiskis)
  1388. Subject: Getting started with appletalk
  1389. Message-ID: <9101280202.AA13787@polyslo.CalPoly.EDU>
  1390. Newsgroups: fa.think-c
  1391. Lines: 7
  1392. Date: 28 Jan 91 17:06:00 GMT
  1393.  
  1394.  
  1395. What is the best way to get started with appletalk?  The Inside mac
  1396. documentation is kind of a mess and it doesn't even cover how
  1397. to access the ADSP protocol... Any suggestions?
  1398.  
  1399. - Eric Yiskis
  1400. (eyiskis@polyslo.calpoly.edu)
  1401. 
  1402. 
  1403. Path: ucivax!gateway
  1404. From: dmac@eagle.mit.edu ("David S. McCormick")
  1405. Subject: Need QuickDraw help for FrameRect & FrameArc
  1406. Message-ID: <9101290519.AA25391@EAGLE.MIT.EDU>
  1407. Newsgroups: fa.think-c
  1408. Lines: 48
  1409. Date: 29 Jan 91 05:20:45 GMT
  1410.  
  1411. I am using QuickDraw calls into a PicHandle to draw in a subclass of
  1412. Pane in TCL. I am being driven batty by two QuickDraw related problems.
  1413. First, I am trying to draw the frame of arcs which are bounded by
  1414. perfectly square arcRects. I know that you don't get the radii frame'd
  1415. by FrameArc(), so I am trying to mimic this by something like:
  1416.  
  1417. penSize = 1;
  1418. PenSize( penSize, penSize );
  1419. /* Frame the piece of the pie */
  1420. FrameArc(&arcRect, startAngle, arcAngle);
  1421. /* draw borders of wedges */
  1422. MoveTo( center.h, center.v  );
  1423. Line(     (int) (radius *  sin(startAngle * DegToRad) + 0.5 - penSize ),
  1424.                          (int) (radius * -cos(startAngle * DegToRad) + 0.5 - penSize ) );
  1425. MoveTo( center.h, center.v  );
  1426. endAngle = startAngle + arcAngle;
  1427. Line(     (int) (radius *  sin(endAngle * DegToRad) + 0.5 - penSize ),
  1428.                          (int) (radius * -cos(endAngle * DegToRad) + 0.5 - penSize )  );
  1429.  
  1430. The result is close, but not perfect. Is there a way to get the point of
  1431. intersection of the radius and the arc from which I could draw to the
  1432. center? Or is this one of those things resulting from using integer
  1433. coordinate systems>
  1434.  
  1435. Second, during the routine in which I am drawing the arcs, I start off
  1436. by drawing a circle around everything that is plotted, e.g.,
  1437.  
  1438.     /* draw circle surrounding the plot */
  1439.     circleRect = plotRect;
  1440.     InsetRect( &circleRect, 4, 4 );
  1441.     FrameArc( &circleRect, 0, 360 );
  1442.  
  1443. I am writing all this into a PicHandle which is HLock'ed after the
  1444. initial call to OpenPicture(). One of the calls is to FrameArc( &anArc,
  1445. 0, 360 ) which produces a circle nicely in the window in which my pane
  1446. resides. I go to save this file as a PICT file via CPictFile by handing
  1447. off the PicHandle. This works just fine, except that when I open the
  1448. file with Canvas, the circle is the only thing that doesn't show up on
  1449. the screen. It IS there, because I can select it and fill it with a
  1450. pattern, but there is no associated pen size of 1 for the FRAME. What
  1451. gives?
  1452.  
  1453. Thanks in advance,
  1454.  
  1455. Cheers,
  1456. David McCormick
  1457. MIT-EAPS Geology
  1458. dmac@eagle.mit.edu
  1459. 
  1460. 
  1461. Path: ucivax!gateway
  1462. From: gstein@us.oracle.COM (Greg Stein)
  1463. Subject: Re: Need QuickDraw help for FrameRect & FrameArc
  1464. Message-ID: <9101291240.AA14562@hqsun4.us.oracle.com>
  1465. Newsgroups: fa.think-c
  1466. Lines: 76
  1467. Date: 29 Jan 91 12:44:11 GMT
  1468.  
  1469. Here are a couple quick things to try:
  1470.  
  1471. Problem #1:
  1472.  
  1473. Try using AngleToPoint() (sp?) to convert your angle to something you
  1474. can use.  Quickdraw might be calculating the sin/cos a little bit
  1475. differently.
  1476.  
  1477.  
  1478. Problem #2:
  1479.  
  1480. Don't lock the PicHandle.  Quickdraw needs to be able to resize the
  1481. handle as it draws the picture.  When you lock it, the memory manager
  1482. might not be able to resize it correctly.  My guess is that Quickdraw
  1483. went ahead and drew the circle, but didn't add it to your PicHandle
  1484. since it couldn't be resized.
  1485.  
  1486. Greg Stein
  1487. Arpa: gstein%oracle.uucp@apple.com
  1488. UUCP: ..!{uunet,apple}!oracle!gstein
  1489.  
  1490.  
  1491. ---- Included Message ----
  1492. From: "David S. McCormick" <dmac@eagle.mit.edu>
  1493. Newsgroups: fa.think-c
  1494. Date: 29 Jan 91 05:20:45 GMT
  1495.  
  1496. I am using QuickDraw calls into a PicHandle to draw in a subclass of
  1497. Pane in TCL. I am being driven batty by two QuickDraw related problems.
  1498. First, I am trying to draw the frame of arcs which are bounded by
  1499. perfectly square arcRects. I know that you don't get the radii frame'd
  1500. by FrameArc(), so I am trying to mimic this by something like:
  1501.  
  1502. penSize = 1;
  1503. PenSize( penSize, penSize );
  1504. /* Frame the piece of the pie */
  1505. FrameArc(&arcRect, startAngle, arcAngle);
  1506. /* draw borders of wedges */
  1507. MoveTo( center.h, center.v  );
  1508. Line(     (int) (radius *  sin(startAngle * DegToRad) + 0.5 - penSize ),
  1509.                          (int) (radius * -cos(startAngle * DegToRad) + 0.5 - penSize ) );
  1510. MoveTo( center.h, center.v  );
  1511. endAngle = startAngle + arcAngle;
  1512. Line(     (int) (radius *  sin(endAngle * DegToRad) + 0.5 - penSize ),
  1513.                          (int) (radius * -cos(endAngle * DegToRad) + 0.5 - penSize )  );
  1514.  
  1515. The result is close, but not perfect. Is there a way to get the point of
  1516. intersection of the radius and the arc from which I could draw to the
  1517. center? Or is this one of those things resulting from using integer
  1518. coordinate systems>
  1519.  
  1520. Second, during the routine in which I am drawing the arcs, I start off
  1521. by drawing a circle around everything that is plotted, e.g.,
  1522.  
  1523.     /* draw circle surrounding the plot */
  1524.     circleRect = plotRect;
  1525.     InsetRect( &circleRect, 4, 4 );
  1526.     FrameArc( &circleRect, 0, 360 );
  1527.  
  1528. I am writing all this into a PicHandle which is HLock'ed after the
  1529. initial call to OpenPicture(). One of the calls is to FrameArc( &anArc,
  1530. 0, 360 ) which produces a circle nicely in the window in which my pane
  1531. resides. I go to save this file as a PICT file via CPictFile by handing
  1532. off the PicHandle. This works just fine, except that when I open the
  1533. file with Canvas, the circle is the only thing that doesn't show up on
  1534. the screen. It IS there, because I can select it and fill it with a
  1535. pattern, but there is no associated pen size of 1 for the FRAME. What
  1536. gives?
  1537.  
  1538. Thanks in advance,
  1539.  
  1540. Cheers,
  1541. David McCormick
  1542. MIT-EAPS Geology
  1543. dmac@eagle.mit.edu
  1544.  
  1545. 
  1546. 
  1547. Path: ucivax!gateway
  1548. From: Tom_Johnson@chip.cs.ucla.edu (Tom Johnson)
  1549. Subject: CommToolbox
  1550. Message-ID: <9101291207.aa29469@ICS.UCI.EDU>
  1551. Newsgroups: fa.think-c
  1552. Lines: 12
  1553. Date: 29 Jan 91 20:10:21 GMT
  1554.  
  1555.                CommToolbox
  1556. Has anyone done a CommToolbox class yet?  I'm afraid that I don't understand it
  1557. well enough yet to do it myself, but if nobody else has, I guess I'll have to
  1558. jump in with both feet.
  1559.  
  1560.  
  1561. Thanks-
  1562.  
  1563. Tom
  1564. tj@cs.ucla.edu
  1565.  
  1566.  
  1567. 
  1568. 
  1569. Path: ucivax!gateway
  1570. From: tlunde@umaxc.weeg.uiowa.edu (Thomas Lunde)
  1571. Subject: Drop me
  1572. Message-ID: <9101300237.AA21332@umaxc.weeg.uiowa.edu>
  1573. Newsgroups: fa.think-c
  1574. Lines: 6
  1575. Date: 30 Jan 91 02:39:34 GMT
  1576.  
  1577.  
  1578. Please remove my address from the Think-C mailing list.  Thank you.
  1579.  
  1580. Thomas Lunde
  1581.  
  1582. tlunde@umaxc.weeg.uiowa.edu
  1583. 
  1584.